package com.xuanzheng.company.service;

import com.xuanzheng.company.entity.User;

import java.util.List;
import java.util.Map;

public interface UserService {
    /**
     * 用户登录
     * @return 登录成功返回用户对象，失败返回null
     */
    User login(String phone, String password, int role);
    
    /**
     * 管理员登录
     * @return 登录成功返回true，失败返回false
     */
    boolean adminLogin(String adminId, String password);
    
    /**
     * 注册普通用户
     * @return 注册成功返回用户ID，失败返回null
     */
    String registerNormalUser(User user);
    
    /**
     * 注册公司负责人
     * @return 注册成功返回用户ID，失败返回null
     */
    String registerCompanyManager(User user);
    
    /**
     * 重置密码
     */
    boolean resetPassword(String phone, String name, String idCard, String newPassword);
    
    /**
     * 检查手机号是否已被注册
     */
    boolean isPhoneExist(String phone);
    
    /**
     * 根据姓名和身份证号查询用户
     */
    User findUserByNameAndIdCard(String name, String idCard);
    
    /**
     * 根据姓名、身份证号和手机号查询用户
     */
    User findUserByNameAndIdCardAndPhone(String name, String idCard, String phone);
    
    /**
     * 更新用户信息
     */
    boolean updateUser(User user);
    
    /**
     * 根据ID查询用户
     */
    User findById(String id);
    
    /**
     * 根据手机号查询用户
     */
    User findByPhone(String phone);
    
    /**
     * 获取所有用户
     */
    List<User> getAllUsers();
    
    /**
     * 根据关键词搜索用户
     * @param keyword 关键词
     * @param searchType 搜索类型：name, phone, idCard
     * @return 用户列表
     */
    List<User> searchUsers(String keyword, String searchType);
    
    /**
     * 更新用户状态
     * @param id 用户ID
     * @param status 状态：1-正常，0-禁用
     * @return 是否更新成功
     */
    boolean updateUserStatus(String id, int status);
    
    /**
     * 根据用户ID删除用户
     * @param id 用户ID
     * @return 是否删除成功
     */
    boolean deleteUserById(String id);

    /**
     * 更新管理员密码
     * @param adminId 管理员ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return 更新结果，包含是否成功和消息
     */
    Map<String, Object> updateAdminPassword(String adminId, String oldPassword, String newPassword);
} 